package com.itheima.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.dao.PermissionDao;
import com.itheima.entity.PageResult;
import com.itheima.exceptions.BusinessException;
import com.itheima.pojo.Permission;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * @author W.J.Y
 */
@Service(version = "1.0.0",interfaceClass = PermissionService.class)
@Transactional
public class PermissionServiceImpl implements PermissionService{


    @Resource
    private PermissionDao permissionDao;


    /**
     * 新增权限
     * @param permission    权限实例
     * @throws BusinessException    可能出现的业务异常，重复定义权限等
     */
    @Override
    public void add(Permission permission) throws BusinessException {
        Integer count = permissionDao.findByNameOrKeyWord(permission);
        if(count>0){
            throw new BusinessException("已存在相同名称或者权限代码的权限，添加失败！");
        }

        //赋予创建时间并添加
        permission.setCreateTime(new Date());
        permissionDao.add(permission);
    }

    /**
     * 编辑权限
     * @param permission    权限实例
     * @throws BusinessException    可能出现的重名异常等
     */
    @Override
    public void update(Permission permission) throws BusinessException {
        Integer count = permissionDao.findByNameOrKeyWord(permission);
        if(count>0){
            throw new BusinessException("已存在相同名称或者权限代码的权限，编辑失败！");
        }
        permissionDao.update(permission);

    }

    /**
     * 查询全部权限信息
     * @return  返回结果
     */
    @Override
    public List<Permission> findAll() {
        return permissionDao.findAll();
    }

    /**
     * 删除权限
     * @param id    权限ID
     * @throws BusinessException 可能出现的业务异常
     */
    @Override
    public void delete(int id) throws BusinessException {
        String roleName = permissionDao.findCountById(id);
        if (roleName!=null){
            throw new BusinessException("权限已被角色"+roleName+"绑定，请先解除绑定！");
        }
        permissionDao.delete(id);
    }

    /**
     * 分页查询用户信息
     * @param pageNum   当前页
     * @param pageSize  每页显示条数
     * @param queryString   查询语句
     * @return  用户分页信息
     */
    @Override
    public PageResult findPage(int pageNum, int pageSize, String queryString) {
        //开启分页查询
        PageHelper.startPage(pageNum,pageSize);
        //调用dao层查询语句
        Page<Permission> page = permissionDao.findPage(queryString);
        //封装分页查询结果对象
        return new PageResult(page.getTotal(),page.getResult());
    }

    /**
     * 根据ID查询权限
     * @param id    权限ID
     * @return  返回的结果
     */
    @Override
    public Permission findById(int id) {
        return permissionDao.findById(id);
    }
}
